<?php

require_once APPLICATION_PATH . '/forms/NuevoCliente.php';
require_once APPLICATION_PATH . '/forms/BuscarCliente.php';

class ClienteController extends Zend_Controller_Action
{

    private $clientes;

    public function init()
    {
        $this->initView();
        $this->_flashMessenger = $this->_helper->FlashMessenger;
        $this->view->baseUrl = $this->_request->getBaseUrl();
        $this->view->messages = $this->_flashMessenger;
    }

    public function indexAction()
    {
        $this->consultarAction();
    }

    public function consultarAction()
    {
        $this->view->title = "Listado de Clientes";

        $urlCriterio = $this->_request->getParam('criterio', null);
        $urlABuscar = $this->_request->getParam('mostrar', null);

        // si hay que realizar una busqueda
        if ($urlCriterio !== null && $urlABuscar !== null){
            $criterio = urldecode($urlCriterio);
            $aBuscar = urldecode($urlABuscar);

            $clientesModel = new Spalm_Model_Single_ClienteEntity();
            $select = $clientesModel->getMapper()->getDbTable()->select();

            switch ($criterio) {
                case 'razonSocial' :
                    $select->where('razon_social = ?',$aBuscar);
                    break;
                case 'nroDocumento' :
                    $numero = (int) $aBuscar;
                    $select->where('numero_documento = ?',$numero);
                    break;
                case 'localidad' :
                    $localidadModel = new Spalm_Model_Single_LocalidadEntity();
                    $consultaLocalidad = $localidadModel->getMapper()->getDbtable()->select();
                    $consultaLocalidad->where('nombre = ?',$aBuscar);

                    $localidad = current($localidadModel->fetchAll($consultaLocalidad));

                    $select->where('localidad_id = ?',$localidad->getPK());
                    break;
                case 'tipoDocumento' :
                    $tipoDocumentoModel = new Spalm_Model_Single_TipoDocumentoEntity();
                    $consultaTipoDoc = $tipoDocumentoModel->getMapper()->getDbtable()->select();
                    $consultaTipoDoc->where('sigla = ?',$aBuscar);

                    $tipoDocumento = current($tipoDocumentoModel->fetchAll($consultaTipoDoc));

                    $select->where('tipo_documento_id = ?',$tipoDocumento->getPK());
                    break;
                case 'domicilio' :
                    $select->where('domicilio = ?',$aBuscar);
                    break;
                case 'nroTelefono' :
                    $telefono = (int) $aBuscar;
                    $select->where('nro_telefono = ?',$telefono);
                    break;
                case 'email' :
                    $select->where('email = ?',$aBuscar);
                    break;
            }
        }
        else { // si no, recuperar todo
            $select = null;
        }

        $clienteModel = new Spalm_Model_Single_ClienteEntity();
        $this->view->clientes = $clienteModel->fetchAll($select);

//        if ($this->busqueda){
//            $this->busqueda = false;
//            $this->view->clientes = $this->clientes;
//        }
//        else {
//            $cliente = new Spalm_Model_Single_ClienteEntity();
//            $this->view->clientes = $cliente->fetchAll();
//        }
    }

    public function nuevoAction()
    {
        $this->view->title = "Agregar nuevo cliente";
        $this->view->headTitle($this->view->title, 'PREPEND');



        $form = new Form_NuevoCliente();

        $this->view->form = $form;

        if ($this->getRequest()->isPost()) {
            $formData = $this->getRequest()->getPost();
            if ($form->isValid($formData)) {
                try {
                $cliente = new Spalm_Model_Single_ClienteEntity();
                $localidadModel = new Spalm_Model_Single_LocalidadEntity();
                $tipoDocModel = new Spalm_Model_Single_TipoDocumentoEntity();

                //arma el objeto de localidades
                $localidad = $localidadModel->find((int) $form->getValue('localidades'));
                $tipoDoc = $tipoDocModel->find( (int) $form->getValue('tiposDocumentos'));

                $cliente->setDomicilio($form->getValue('domicilio'));
                $cliente->setEmail($form->getValue('email'));
                $cliente->setNroTelefono($form->getValue('nroTelefono'));
                $cliente->setNumeroDocumento($form->getValue('nroDocumento'));
                $cliente->setRazonSocial($form->getValue('razonSocial'));
                $cliente->setTipoDocumento($tipoDoc);
                $cliente->setLocalidad($localidad);


                $cliente->save();

                $this->_flashMessenger->addMessage('El cliente ha sido guardado con &eacute;xito');
                $this->_redirect("/cliente/consultar");

            } catch (Exception $e) {
                $this->_flashMessenger->addMessage($e->getMessage());
            }
            } else {
                $form->populate($formData);
            }
        }
    }

    public function editarAction()
    {
        $id = (int)$this->_request->getParam('id', 0);
        $this->view->title = "Editar Cliente";


        $clienteModel = new Spalm_Model_Single_ClienteEntity();
        $cliente = $clienteModel->find($id);

        $form = new Form_NuevoCliente($cliente);
        $this->view->form = $form;

        if (null === $cliente) {
            $this->_flashMessenger->addMessage('El cliente no existe');
            $this->_redirect("/");
        }

        if ($this->_request->isPost())
        {
            $formData = $this->_request->getPost();
            if (!$form->isValid($formData)) {
                $form->populate($formData);
                return;
            }

            try {
                $localidadModel = new Spalm_Model_Single_LocalidadEntity();
                $tipoDocModel = new Spalm_Model_Single_TipoDocumentoEntity();

                //arma el objeto de localidades
                $localidad = $localidadModel->find((int) $form->getValue('localidades'));
                $tipoDoc = $tipoDocModel->find( (int) $form->getValue('tiposDocumentos'));

                $cliente->setDomicilio($form->getValue('domicilio'));
                $cliente->setEmail($form->getValue('email'));
                $cliente->setNroTelefono($form->getValue('nroTelefono'));
                $cliente->setNumeroDocumento($form->getValue('nroDocumento'));
                $cliente->setRazonSocial($form->getValue('razonSocial'));
                $cliente->setTipoDocumento($tipoDoc);
                $cliente->setLocalidad($localidad);


                $cliente->save();

                $this->_flashMessenger->addMessage('El cliente ha sido guardado con &eacute;xito');
                $this->_redirect("/cliente/consultar");

            } catch (Exception $e) {
                $this->_flashMessenger->addMessage($e->getMessage());
            }
        }
    }

    public function eliminarAction()
    {
        $id = (int)$this->_request->getParam('id', 0);

        $clientesModel = new Spalm_Model_Single_ClienteEntity();
        $cliente = $clientesModel->find($id);

        if (null !== $cliente) {
            try {

                $cliente->remove();

                $this->_flashMessenger->addMessage('El cliente ha sido eliminado con &eacute;xito');
            } catch (Exception $e) {
                $this->_flashMessenger->addMessage($e->getMessage());
            }
        } else{
            $this->_flashMessenger->addMessage('El cliente no existe');
        }

        $this->_redirect("/cliente/consultar");
    }

    public function mostrarAction()
    {
        // action body
    }

    public function buscarAction()
    {
        $this->view->title = "Buscar Clientes";

        $form = new Form_BuscarCliente();
        $this->view->form = $form;

        if ($this->_request->isPost())
        {
            $formData = $this->_request->getPost();
            if (!$form->isValid($formData)) {
                $form->populate($formData);
                return;
            }

            $criterio = $form->getValue('criterio');
            $aBuscar = $form->getValue('buscado');

            $this->_redirect("/cliente/consultar/criterio/" . urlencode($criterio) . "/mostrar/" . urlencode($aBuscar));
        }
    }


}













